package com.itheima.java.ai.langchin4j.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.java.ai.langchin4j.entity.SymptomAssessment;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 症状自评服务接口
 *
 * @author xiaozhi
 * @since 2025-01-07
 */
public interface SymptomAssessmentService extends IService<SymptomAssessment> {

    /**
     * 创建症状评估
     *
     * @param assessment 症状评估信息
     * @return 评估结果
     */
    SymptomAssessment createAssessment(SymptomAssessment assessment);

    /**
     * AI分析症状
     *
     * @param assessment 症状评估信息
     * @return 分析结果
     */
    String analyzeSymptoms(SymptomAssessment assessment);

    /**
     * 计算风险等级
     *
     * @param assessment 症状评估信息
     * @return 风险等级
     */
    String calculateRiskLevel(SymptomAssessment assessment);

    /**
     * 推荐就诊科室
     *
     * @param symptoms 症状描述
     * @return 推荐科室
     */
    String recommendDepartment(String symptoms);

    /**
     * 分页查询用户的症状评估记录
     *
     * @param userId   用户ID
     * @param pageNum  页码
     * @param pageSize 页大小
     * @return 分页结果
     */
    IPage<SymptomAssessment> getAssessmentsByUserId(Long userId, Integer pageNum, Integer pageSize);

    /**
     * 获取用户最近的症状评估
     *
     * @param userId 用户ID
     * @param limit  限制数量
     * @return 评估记录列表
     */
    List<SymptomAssessment> getRecentAssessments(Long userId, Integer limit);

    /**
     * 获取待审核的评估记录
     *
     * @param pageNum  页码
     * @param pageSize 页大小
     * @return 分页结果
     */
    IPage<SymptomAssessment> getPendingReviews(Integer pageNum, Integer pageSize);

    /**
     * 医生审核评估
     *
     * @param assessmentId 评估ID
     * @param doctorId     医生ID
     * @param review       审核意见
     * @return 是否成功
     */
    Boolean reviewAssessment(Long assessmentId, Long doctorId, String review);

    /**
     * 获取症状评估统计数据
     *
     * @param userId    用户ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 统计数据
     */
    Map<String, Object> getAssessmentStatistics(Long userId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取风险等级分布统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 统计数据
     */
    List<Map<String, Object>> getRiskLevelDistribution(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取科室推荐统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 统计数据
     */
    List<Map<String, Object>> getDepartmentRecommendationStats(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 更新评估状态
     *
     * @param assessmentId 评估ID
     * @param status       新状态
     * @return 是否成功
     */
    Boolean updateAssessmentStatus(Long assessmentId, String status);

    /**
     * 删除症状评估
     *
     * @param assessmentId 评估ID
     * @param userId       用户ID
     * @return 是否成功
     */
    Boolean deleteAssessment(Long assessmentId, Long userId);
}